package com.runvp.service.biz.service.impl;

import com.runvp.common.core.text.Convert;
import com.runvp.common.exception.base.BaseException;
import com.runvp.common.utils.DateUtils;
import com.runvp.common.utils.ShiroUtils;
import com.runvp.service.biz.domain.BizGoods;
import com.runvp.service.biz.mapper.BizGoodsMapper;
import com.runvp.service.biz.service.IBizGoodsService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * 商品列表Service业务层处理
 * 
 * @author runvp
 * @date 2022-09-18
 */
@Service
public class BizGoodsServiceImpl implements IBizGoodsService {
    @Autowired
    private BizGoodsMapper bizGoodsMapper;

    /**
     * 查询商品列表
     * 
     * @param id 商品列表主键
     * @return 商品列表
     */
    @Override
    public BizGoods selectBizGoodsById(Long id) {
        return bizGoodsMapper.selectBizGoodsById(id);
    }
    /**
     * 初始化电价
     *
     * @param deviceSn
     * @return 商品列表
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void initFee(String deviceSn){
        List<BizGoods> defs =  bizGoodsMapper.selectDefaultBizGoodsList(new BizGoods());
        if(CollectionUtils.isEmpty(defs)){
            return;
        }
        BizGoods query = new BizGoods();
        query.setDeviceSn(deviceSn);
        List<BizGoods> olds =  bizGoodsMapper.selectBizGoodsList(query);
        if(!CollectionUtils.isEmpty(olds)){
            throw new BaseException("收费方案已完成初始化,请勿重复操作");
        }
        for(BizGoods goods:defs){
            BizGoods initData = new BizGoods();
            BeanUtils.copyProperties(goods,initData);
            initData.setCategoryId(1L);
            initData.setDeviceSn(deviceSn);
            insertBizGoods(initData);
        }
    }
    /**
     * 查询商品列表列表
     * 
     * @param bizGoods 商品列表
     * @return 商品列表
     */
    @Override
    public List<BizGoods> selectBizGoodsList(BizGoods bizGoods) {
        return bizGoodsMapper.selectBizGoodsList(bizGoods);
    }

    /**
     * 新增商品列表
     * 
     * @param bizGoods 商品列表
     * @return 结果
     */
    @Override
    public int insertBizGoods(BizGoods bizGoods) {
        BizGoods query = new BizGoods();
        query.setDeviceSn(bizGoods.getDeviceSn());
        query.setBarCode(bizGoods.getBarCode());
        List<BizGoods> goods = selectBizGoodsList(query);
        if(!CollectionUtils.isEmpty(goods)){
            throw new BaseException("功率代码已存在");
        }
        bizGoods.setCreateTime(DateUtils.getNowDate());
        bizGoods.setCreateBy(ShiroUtils.getLoginName());
        return bizGoodsMapper.insertBizGoods(bizGoods);
    }

    /**
     * 修改商品列表
     * 
     * @param bizGoods 商品列表
     * @return 结果
     */
    @Override
    public int updateBizGoods(BizGoods bizGoods) {
        bizGoods.setUpdateTime(DateUtils.getNowDate());
        bizGoods.setUpdateBy(ShiroUtils.getLoginName());
        return bizGoodsMapper.updateBizGoods(bizGoods);
    }

    /**
     * 批量删除商品列表
     * 
     * @param ids 需要删除的商品列表主键
     * @return 结果
     */
    @Override
    public int deleteBizGoodsByIds(String ids) {
        return bizGoodsMapper.deleteBizGoodsByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除商品列表信息
     * 
     * @param id 商品列表主键
     * @return 结果
     */
    @Override
    public int deleteBizGoodsById(Long id) {
        return bizGoodsMapper.deleteBizGoodsById(id);
    }
}
